/**
 * 注册、登录、注销
 * */
import util from '@/libs/util';
import store from '@/store/index';
import router from '@/router';
import {
    AccountLogin,
    AccountdingLogin,
    GetMenus
} from '@api/account';

import { Modal } from 'view-design';
// 方法
import { getMenuSider } from '@/libs/system';
export default {
    namespaced: true,
    state: {
        loginInfo: {}, // 登陆信息，用语断线重连
        project: [],
    },
    mutations: {
        SET_LOGIN_INFO: (state, info) => {
            state.loginInfo = info;
        },
        SET_PROJECT: (state, info) => {
            state.project = info;
        },
    },
    getters: {
        loginInfo: (state) => state.loginInfo,
        project: (state) => state.project,
        // this.$cookies.set('loginInfo', state.loginInfo)
    },
    actions: {
        /**
         * @description 登录
         * @param {Object} param context
         * @param {Object} param username {String} 用户账号
         * @param {Object} param password {String} 密码
         * @param {Object} param route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式
         */
        SetLoginInfo ({ commit }, info) {
            commit('SET_LOGIN_INFO', info);
            // util.cookies.set('loginInfo', info);
        },
        SetProject ({ commit }, info) {
            commit('SET_PROJECT', info);
            // util.cookies.set('loginInfo', info);
        },
        login ({ dispatch }, { username = '', password = '' } = {}) {
            return new Promise((resolve, reject) => {
                // 开始请求登录接口
                AccountLogin({
                    username,
                    password
                })
                    .then(async (res) => {
                        // console.log(res,'res')
                        // 站点下有项目配置全局ProjectId冲突 webcurrProject头部切换存储值
                        let currentProject = util.storage.get('webcurrProject')
                        // util.storage.clear()
                        // 设置 cookie 一定要存 uuid 和 token 两个 cookie
                        // 整个系统依赖这两个数据进行校验和存储
                        // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复
                        // token 代表用户当前登录状态 建议在网络请求中携带 token
                        // 如有必要 token 需要定时更新，默认保存一天，可在 setting.js 中修改
                        // 如果你的 token 不是通过 cookie 携带，而是普通字段，也可视情况存储在 localStorage
                        util.cookies.set('uuid', res.info.member_id);
                        util.cookies.set('token', res.access_token);
                        // var str = 'RUNOOB'
                        // 密码存储到cookies中base64加密存储
                        let enc = window.btoa(password) //编码成base64的
                        // let dec = window.atob(enc) //把base64解码
                        // var res = '编码字符串为: ' + enc + '<br>' + '解码后字符串为: ' + dec
                        // console.log(res)
                        util.cookies.set('username', username);
                        // console.log(username,'username')
                        util.cookies.set('password', enc);
                        // if (!currentProject) {
                        //     util.storage.set('webcurrProject', res.info.project[0].value)
                        // } else {
                        //     util.storage.set('webcurrProject', currentProject)
                        // }
                        let isCurrent = false;
                        res.info.project.forEach(el => {
                            // 判断是否有选中项目，没有去默认第一个项目
                            if(el.value == currentProject){
                                isCurrent = true;
                                return;
                            }
                        });

                        if(isCurrent){
                            util.storage.set('webcurrProject', currentProject)
                        }else{
                            util.storage.set('webcurrProject', res.info.default_project_id)
                        }
                        util.storage.set('home', false)
                        // 设置 vuex 用户信息
                        await dispatch('admin/user/set', res.info, {
                            root: true
                        });
                        // 用户登录后从持久化数据加载一系列的设置
                        await dispatch('load');
                        // 结束
                        resolve(res);
                    })
                    .catch((err) => {
                        // console.log('err: ', err);
                        reject(err);
                });
            });
        },
        logins ({ dispatch }, { user_id = '' } = {}) {
            return new Promise((resolve, reject) => {
                // 开始请求登录接口
                AccountdingLogin({
                    user_id
                })
                    .then(async (res) => {
                        let currentProject = util.storage.get('webcurrProject')
                        util.storage.clear()
                        // 设置 cookie 一定要存 uuid 和 token 两个 cookie
                        // 整个系统依赖这两个数据进行校验和存储
                        // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复
                        // token 代表用户当前登录状态 建议在网络请求中携带 token
                        // 如有必要 token 需要定时更新，默认保存一天，可在 setting.js 中修改
                        // 如果你的 token 不是通过 cookie 携带，而是普通字段，也可视情况存储在 localStorage
                        util.cookies.set('uuid', res.info.member_id);
                        util.cookies.set('token', res.access_token);
                        if (!currentProject) {
                            util.storage.set('webcurrProject', res.info.project[0].value)
                        } else {
                            util.storage.set('webcurrProject', currentProject)
                        }
                        // 密码存储到cookies中base64加密存储
                        // let enc = window.btoa(password) //编码成base64的
                        // let dec = window.atob(enc) //把base64解码
                        // var res = '编码字符串为: ' + enc + '<br>' + '解码后字符串为: ' + dec
                        // console.log(res)
                        // util.cookies.set('username', username);
                        // util.cookies.set('password', enc);
                        // 设置 vuex 用户信息
                        await dispatch('admin/user/set', res.info, {
                            root: true
                        });
                        // 用户登录后从持久化数据加载一系列的设置
                        await dispatch('load');
                        // 结束
                        resolve(res);
                    })
                    .catch((err) => {
                        reject(err);
                });
            });
        },
        /**
         * 菜单获取
         */
        getmenu ({ dispatch }, id) {
            return new Promise((resolve, reject) => {
                // 开始请求登录接口
                GetMenus({
                    project_id: id
                })
                    .then((res) => {
                        util.storage.set('menus', res.auth);
                        util.storage.set('project', res.project);
                        // const filterMenuSider = getMenuSider(res.auth.sider, res.project[0].value);
                        // 根据当前项目
                        const filterMenuSider = getMenuSider(res.auth.sider, id);
                        store.commit('admin/menu/setHeader', res.auth.header);
                        store.commit('admin/menu/setSider', filterMenuSider);
                        store.commit('admin/menu/setProject', res.project);
                        // store.commit('admin/menu/setCurrentProject', res.project[0].value);
                        // 根据当前项目
                        let webCurrentProject = util.storage.get('webcurrProject')
                        // console.log(webCurrentProject, 'webcurrProject')
                        let isCurrent = false;
                        res.project.forEach(el => {
                            // console.log(el)
                            if(el.value == webCurrentProject) {
                                isCurrent = true;
                                return;
                            }
                        });
                        store.commit('admin/menu/setCurrentProject', isCurrent ? webCurrentProject : id);

                        resolve();
                    })
                    .catch((err) => {
                        reject(err);
                });
            });
        },

        /**
         * @description 退出登录
         * */
        logout ({ commit, dispatch }, { confirm = false, vm } = {}) {
            async function logout () {
                // 删除cookie
                util.cookies.remove('token');
                util.cookies.remove('uuid');
                // let loginInfo = util.storage.get('loginInfo')
                let currentProject = util.storage.get('webcurrProject')
                let autoLogin = util.storage.get('autoLogin')
                util.storage.remove('is_super')
                util.storage.remove('menus')
                util.storage.remove('project')
                util.storage.remove('webcurrProject')
                // util.storage.clear()
                // util.storage.set('loginInfo', loginInfo)
                util.storage.set('autoLogin', autoLogin)
                // util.storage.set('webcurrProject', currentProject)
                util.storage.set('home', false)
                // 清空 vuex 用户信息
                await dispatch('admin/user/set', {}, { root: true });
                // 跳转路由
                // router.push({
                //     name: 'login'
                // });
                // console.log(, 'loction')
                sessionStorage.clear();
                // 重置store
    
                // window.location.reload()
                window.location.replace(`${window.location.origin}/#/login`)
            }

            if (confirm) {
                Modal.confirm({
                    title: vm.$t('basicLayout.logout.confirmTitle'),
                    content: vm.$t('basicLayout.logout.confirmContent'),
                    onOk () {
                        logout();
                    }
                });
            } else {
                logout();
            }
        },
        /**
         * @description 用户登录后从持久化数据加载一系列的设置
         * @param {Object} state vuex state
         * @param {Object} dispatch vuex dispatch
         */
        load ({ state, dispatch }) {
            return new Promise(async (resolve) => {
                // 加载用户登录信息
                await dispatch('admin/user/load', null, { root: true });
                // 持久化数据加载上次退出时的多页列表
                await dispatch('admin/page/openedLoad', null, { root: true });
                // end
                resolve();
            });
        }
    }
};
